package com.zut.controller;
import com.zut.pojo.Result;
import org.apache.commons.io.FileUtils;
import org.springframework.http.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.UUID;
/**
 * @Author: lee
 * @Date: 2022/4/25 11:18
 */
@RestController
@CrossOrigin
public class FileController {

    /**
     * 上传文件
     * @param file 文件数据
     * @return 文件的绝对路径
     */
    // 文件上传
    @PostMapping("/upload")
    public Result fileUpload(@RequestParam("file") MultipartFile file) throws IOException {
        // 先获取到文件要保存的路径
        // 获取文件后缀名，然后为文件起一个新名字（使用 UUID 避免重名）
        String fileName = file.getOriginalFilename();
        System.out.println(fileName);
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        String newFileName = UUID.randomUUID().toString() + suffix;
        System.out.println("【新文件名】" + newFileName);

        // 新建一个文件对象
        File target = new File("D://img", newFileName);

        // 如果存放路径不存在，就新建一个
        if (!target.getParentFile().exists()) {
            // 新建文件夹
            if (!target.getParentFile().mkdirs()) {
                System.out.println("【目录为空】新建文件夹失败！");
                return Result.error("【目录为空】新建文件夹失败");
            }
        }
        // 成功的话将文件保存
        file.transferTo(target);
        //todo 把文件的完整路径保存到数据库  adasdas.jpg
        // 最后返回文件的地址
        return Result.success(target.getPath());
    }


    // 文件下载----暂时不用
    @GetMapping("download/{fileName:.+}")
    public ResponseEntity<byte[]> downloadFile(@PathVariable("fileName") String fileName, @RequestHeader("User-Agent") String userAgent, HttpServletRequest request) throws IOException {
       // String realPath = request.getSession().getServletContext().getRealPath("/" + "null");
        String realPath = "D://img";
        File downloadFile = new File(realPath, fileName);
        byte[] data = FileUtils.readFileToByteArray(downloadFile);
        //解决ie下载时文件名乱码的问题
        userAgent = userAgent.toUpperCase();
        //判断是否是ie浏览器
        if (userAgent.contains("MSIE") || userAgent.contains("TRIDENT") || userAgent.contains("EDGE")) {
            //IE下载文件名乱码可以直接通过URL编码解决
            fileName = URLEncoder.encode(fileName, "UTF-8"); //StandardCharsets.UTF_8.name();
        }else{
            //其他浏览器需要使用转码进行解决
            fileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
        }
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", MediaType.APPLICATION_OCTET_STREAM_VALUE);
        headers.add("Content-Disposition", "attachment; filename=" + fileName);
        return new ResponseEntity<>(data, headers, HttpStatus.OK);
    }
}
